package com.example.d6_tcp3;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class ServerReaderThread extends Thread {
    private Socket socket;

    public ServerReaderThread(Socket socket) {
        this.socket = socket;
    }

    /**
     * 重写Runnable接口的run方法,用于处理客户端的连接和数据接收
     * 此方法将在一个新的线程中执行,以保持服务器的接收逻辑与主线程分离
     */
    @Override
    public void run() {
        try {
            // 获取客户端发送的数据流
            InputStream is = socket.getInputStream();
            // 使用DataInputStream包装输入流,以便于读取数据
            DataInputStream dis = new DataInputStream(is);
            while (true) {
                try {
                    // 持续监听并读取客户端发送的消息
                    String msg = dis.readUTF();
                    // 输出接收到的消息到控制台
                    System.out.println(msg);
                } catch (Exception e) {
                    // 当发生Exception时,表明客户端可能已断开连接
                    System.out.println("客户端下线了：" + socket.getRemoteSocketAddress());
                    // 关闭数据输入流和socket连接
                    dis.close();
                    socket.close();
                    // 结束循环,停止监听
                    break;
                }
            }
        } catch (IOException e) {
            // 打印异常信息,用于调试和错误追踪
            e.printStackTrace();
        }
    }
}
